package cn.tedu.learn.tea.infrastructure.data.converter;

import cn.tedu.learn.tea.domain.bo.ContentBO;
import cn.tedu.learn.tea.domain.bo.ContentListBO;
import cn.tedu.learn.tea.po.Content;
import cn.tedu.learn.tea.protocol.parm.ContentParam;
import cn.tedu.learn.tea.protocol.parm.ContentUpdateParam;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 内容转换类
 */
@Component
public class ContentConverter {

    /**
     * 内容param对象转内容po对象
     *
     * @param contentParam 内容param对象
     * @return 内容po对象
     */
    public Content paramToPo(ContentParam contentParam) {
        Content content = new Content();
        BeanUtils.copyProperties(contentParam, content);
        Long nowTime = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
        content.setGmtCreate(nowTime);
        content.setGmtModified(nowTime);
        return content;
    }

    /**
     * 内容修改param对象转内容po对象
     *
     * @param contentUpdateParam 内容修改param对象
     * @return 内容po对象
     */
    public Content paramToPo(ContentUpdateParam contentUpdateParam) {
        Content content = new Content();
        BeanUtils.copyProperties(contentUpdateParam, content);
        Long nowTime = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
        content.setGmtModified(nowTime);
        return content;
    }

    /**
     * 内容po列表对象转内容bo列表对象
     *
     * @param list 内容po列表
     * @return 内容bo列表
     */
    public List<ContentListBO> poListToBoList(List<Content> list) {
        List<ContentListBO> contentBoList = new ArrayList<>();
        if (list != null && !list.isEmpty()) {
            contentBoList = list.stream().map(content -> {
                ContentListBO contentVo = new ContentListBO();
                BeanUtils.copyProperties(content, contentVo);
                return contentVo;
            }).collect(Collectors.toList());
        }
        return contentBoList;
    }

    /**
     * 内容po列表对象转内容bo列表对象
     *
     * @param content 内容po
     * @return 内容bo
     */
    public ContentBO poToBo(Content content) {
        ContentBO contentBO = new ContentBO();
        BeanUtils.copyProperties(content, contentBO);
        return contentBO;
    }
}
